/* button实例*/

#include "button.h"


struct Button BTN_A;
struct Button BTN_B;


uint16_t A_long_count=0;
uint16_t B_long_count=0;


void long_press_count_init(void)
{
    A_long_count=0;
    B_long_count=0;

}


uint8_t read_btn_A_GPIO()
{
    return HAL_GPIO_ReadPin(GPIO_BUTTON_A_PORT, GPIO_BUTTON_A_PIN);
}

uint8_t read_btn_B_GPIO()
{
    return HAL_GPIO_ReadPin(GPIO_BUTTON_B_PORT,GPIO_BUTTON_B_PIN);
}


void BTN_A_PRESS_DOWN_Handler(void* btn)
{
    A_long_count=0;

}

void BTN_A_PRESS_UP_Handler(void* btn)
{


    if(A_long_count!=0) {
        A_long_count=0;
    };

}


void BTN_A_PRESS_REPEAT_Handler(void* btn)
{
    

}

void BTN_A_TRIPLE_Click_Handler(void* btn)
{
    
}


void BTN_A_SINGLE_Click_Handler(void* btn)
{
   rt_kprintf("[%u] Button A single click. \r\n", rt_tick_get());
}



void BTN_A_LONG_PRESS_HOLD_Handler(void* btn)
{
    
    A_long_count++;


    if(A_long_count==40) {
        
    }
    if(A_long_count==80) {
       
    }
    if(A_long_count==120) {
       
    }
    if((A_long_count==160)&&(B_long_count>=40)) {
       
    }

}
void BTN_A_EIGHT_Click_Handler(void* btn)
{
   
}

void BTN_B_PRESS_DOWN_Handler(void* btn)
{
    B_long_count=0;

}

void BTN_B_PRESS_UP_Handler(void* btn)
{

}

void BTN_B_SINGLE_Click_Handler(void* btn)
{
 rt_kprintf("[%u] 按键B单击!\r\n", rt_tick_get());
}


void BTN_B_LONG_PRESS_HOLD_Handler(void* btn)
{

}

void BTN_B_PRESS_REPEAT_Handler(void* btn)
{

  
}

void BTN_B_TRIPLE_Click_Handler(void* btn)
{
  
}
void BTN_B_EIGHT_Click_Handler(void* btn)
{
   
}

void Bsp_Key_Init(void)
{
	GPIO_InitTypeDef	GPIO_Key_InitConfig;
	
	/* Key GPIO时钟使能 */
	GPIO_BUTTON_A_CLK_ENABLE();                          
	GPIO_BUTTON_B_CLK_ENABLE(); 
	
	GPIO_Key_InitConfig.Mode = GPIO_MODE_INPUT;
	GPIO_Key_InitConfig.Pull = GPIO_PULLUP;
	GPIO_Key_InitConfig.Speed = GPIO_SPEED_FREQ_HIGH;
	/* Key GPIO 初始化 */
	GPIO_Key_InitConfig.Pin = GPIO_BUTTON_A_PIN;
	HAL_GPIO_Init(GPIO_BUTTON_B_PORT, &GPIO_Key_InitConfig);
	/* Key GPIO 初始化 */
	GPIO_Key_InitConfig.Pin = GPIO_BUTTON_B_PIN;
	HAL_GPIO_Init(GPIO_BUTTON_B_PORT, &GPIO_Key_InitConfig);
}

int btn_init()
{
    Bsp_Key_Init();
    button_init(&BTN_A, read_btn_A_GPIO, 0);
    button_attach(&BTN_A, PRESS_DOWN,       BTN_A_PRESS_DOWN_Handler);
    button_attach(&BTN_A, PRESS_UP,         BTN_A_PRESS_UP_Handler);
    //button_attach(&BTN_UP, PRESS_REPEAT,     BTN_UP_PRESS_REPEAT_Handler);
    button_attach(&BTN_A, SINGLE_CLICK,     BTN_A_SINGLE_Click_Handler);
    button_attach(&BTN_A, TRIPLE_CLICK,     BTN_A_TRIPLE_Click_Handler);
    button_attach(&BTN_A, EIGHT_CLICK,      BTN_A_EIGHT_Click_Handler);
//	button_attach(&btn1, LONG_RRESS_START, BTN1_LONG_RRESS_START_Handler);
    button_attach(&BTN_A, LONG_PRESS_HOLD,  BTN_A_LONG_PRESS_HOLD_Handler);
    button_start(&BTN_A);

    button_init(&BTN_B, read_btn_B_GPIO, 0);
    button_attach(&BTN_B, PRESS_DOWN,       BTN_B_PRESS_DOWN_Handler);
    button_attach(&BTN_B, PRESS_UP,         BTN_B_PRESS_UP_Handler);
    //button_attach(&BTN_DOWN, PRESS_REPEAT,     BTN_DOWN_PRESS_REPEAT_Handler);
    button_attach(&BTN_B, SINGLE_CLICK,     BTN_B_SINGLE_Click_Handler);
//	button_attach(&btn2, LONG_RRESS_START, BTN2_LONG_RRESS_START_Handler);
    button_attach(&BTN_B, TRIPLE_CLICK,     BTN_B_TRIPLE_Click_Handler);
    button_attach(&BTN_B, EIGHT_CLICK,      BTN_B_EIGHT_Click_Handler);
    button_attach(&BTN_B, LONG_PRESS_HOLD,  BTN_B_LONG_PRESS_HOLD_Handler);
    button_start(&BTN_B);
    return(0);
}
